<?php
//data格式化一个本地时间/日期
//格式化字符串（1）普通字符串原样显示（2）特殊字符，有特定含义
echo date("北京时间：y年m月d日 H：i：s.v e\n");
//通过构造方法创建DataTime对象
$d=new DateTime();//创建一个日期对象，默认值"now"表示当前的日期时间
$d=new DateTime("2000-10-01 00:00:00");//2000-10-01 00:00:00.000000
$d=new DateTime("2000-10-5");//2000-10-05 00:00:00.000000
$d=new DateTime("2000-10 12:34:56");//2000-10-01 12:34:56.000000
$d=new DateTime("2000-10 12:34");//2000-10-01 12:34:00.000000
$d=new DateTime("12-3-4");//2025-10-29 23:00:00.000000 //今天日期的
$d=new DateTime("20001005 123456");//2000-10-05 12:34:56.000000
$d=new DateTime("2000/10/1 12:34:56");//必须有日 2000-10-01 12:34:56.000000
print_r($d);

//日期的格式化输出，访问对象的属性或方法用->而不是=>
echo $d->format("Y-m-d H:i:s.v \e\n");//2000-10-01 12:34:56.000 Asia/Shanghai
echo $d->format("年：Y\n");//年：2000
$a=array('name'=>'zs','age'=>18);

//获取UNIX时间戳，从UTC 1970-1-1 0时到现在的秒数
$d=new DateTime("1970-1-1 8:0", new DateTimeZone('Asia/Shanghai'));
echo "UNIX时间戳：".$d->getTimestamp()."\n";

//根据时间戳创建日期，注意时间戳前面一定要加@
echo (new DateTime("@1671223839"))->format("Y-m-d H:i:s.v \e\n");//2025-10-29 07:33:09.000 +00:00

//设置时区，可以看北京时间对应的不同地区的时间
$d=new DateTime();
echo $d->format("Y-m-d H:i:s.v \e\n");//2025-10-29 15:50:18.551 Asia/Shanghai
$d->setTimezone(new DateTimeZone("UTC"));
echo $d->format("Y-m-d H:i:s.v \e\n");//2025-10-29 07:50:18.551 UTC

//DateTime是可变的，而DateTimeImmutable是不可变的
$d=new DateTimeImmutable("2025-10-29 12:34:56");
echo "北京时间：".$d->format("Y-m-d H:i:s.v e\n");//2025-10-29 12:34:56.000 Asia/Shanghai
echo $d->modify("+1 day")->format("Y-m-d H:i:s.v e\n");//2025-10-27 12:34:56.000 Asia/Shanghai
echo $d->setDate(2000, 10, 1)->format("Y-m-d H:i:s.v e\n");//2000-10-01 12:34:56.000 Asia/Shanghai
echo $d->modify("2000-10")->format("Y-m-d H:i:s.v e\n");//2000-10-01 12:34:56.000 Asia/Shanghai
echo $d->setTime(23, 45)->format("Y-m-d H:i:s.v e\n");//2025-10-29 23:45:00.000 Asia/Shanghai
echo $d->modify("23:45")->format("Y-m-d H:i:s.v e\n");//2025-10-29 23:45:00.000 Asia/Shanghai
//计算本周，上周，下周周一的日期
echo $d->modify("monday this week")->format("Y-m-d H:i:s.v e\n");
echo $d->modify("monday last week")->format("Y-m-d H:i:s.v e\n");
echo $d->modify("monday next week")->format("Y-m-d H:i:s.v e\n");
//当前是第九周，求开学日期 周一的上课时间
$currentWeek=9;
echo (new DateTime())
    ->modify("monday-$currentWeek weeks +8 hours")
    ->format("Y-m-d H:i:s.v e\n");//2025-09-01 00:00:00.000 Asia/Shanghai
//编写函数，根据给定的年，月显示月历
$d=new DateTime('2025-10');
$w=$d->format('N')-1;
$ds=$d->format('t');
echo "       2025年10月\n";
echo"一  二  三  四  五  六  日\n";
for($i=0;$i<$w;++$i) echo '    ';
for($i=1;$i<=$ds;++$i){
    echo $i>=10?$i:' '.$i,'  ';
    if(($i+$w)%7==0)echo "\n";
}
















